﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpGUiBaseInterface.h"
#include "GbmpTypeDefs.h"

namespace gcmp
{
    class IPlatformUiRefreshedEvent;

/// \brief 主窗口
class GCMP_GUI_BASE_INTERFACE_EXPORT IApplicationWindow
{
public:
    /// \brief 析构函数
    virtual ~IApplicationWindow() {}

    /// \brief 显示
    virtual void Show() = 0;

    /// \brief 隐藏
    virtual void Hide() = 0;
   
    /// \brief 最大化显示
    virtual void ShowMaximized() = 0;
    
    /// \brief 最小化显示
    virtual void ShowMinimized() = 0;
  
    /// \brief 获取主窗口的Id
    virtual UInt64 GetApplicationWindowId() const = 0;   

    /// \brief 激活主窗口
    virtual void ActivateWindow() = 0;

    /// \brief 显示编辑模式下的IUiView左上角的 ‘完成/取消’ 子窗口
    ///
    /// 当前显示的是默认的'完成/取消'子窗口, 后续将提供子窗口的定制化能力。
    ///
    /// \param hint 子窗口里的提示信息
    /// \param applyCmdId 当点击完成图标时， 触发的命令ID
    /// \param cancelCmdId 当点击取消时， 需要触发的命令ID
    virtual void ShowApplyOrCancelGui(const std::wstring& hint, const std::wstring& applyCmdId, const std::wstring& cancelCmdId) = 0;

    /// \brief 隐藏编辑模式下的IUiView左上角的 ‘完成/取消’ 子窗口
    virtual void HideApplyOrCancelGui() = 0;

    /// \brief 主窗口初始化，比如设置窗口图标，发送窗口事件等
    /// \return 初始化成功返回true，否则返回false
    virtual bool Initialize() = 0;

    /// \brief 获取平台Ui刷新的事件
    /// 如果外部刷新时机希望与ribbon刷新控件状态保持一致(如侧边栏)，可获取该事件，注册对应的事件处理器
    ///
    /// \return 刷新控件状态的事件指针
    /// \see IPlatformUiRefreshedEvent
    virtual IPlatformUiRefreshedEvent* GetPlatformUiRefreshedEvent() const = 0;   //即将删除
};

}   // end namespace gcmp

